iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
  • reduce(累加值, 當前值) : 一個累加器及陣列中每項元素(由左至右)傳入回呼函式,將陣列化為單一值。
    需要給一個預設值當作累加值的起始值
    有回傳值
let score = [2, 4, 6, 8, 10];
let result = score.reduce(function (acc, cv) {
  return acc + cv;
},0);  // 需要給值當作累加值的第一個數值

console.log(result);
  • 語法

    arr.reduce(callback[accumulator, currentValue, currentIndex, array], initialValue)
    

reference

  • 操作陣列的時候要注意到, 陣列使用的是同一個記憶體位置, 因此會一起更動

    let a = 1;
    let b = a;
    
    console.log(a,b);  //1,1
    
    a = 2;
    console.log(a,b); //2,1
    
    let a = ["a", "b", "c"];
    let b = a;
    
    console.log(a, b);  //['a', 'b', 'c'] ['a', 'b', 'c']
    a[0] = "x";
    
    console.log(a, b); //['x', 'b', 'c'] ['x', 'b', 'c']
    

我有整理的陣列方法大概到這邊,那一樣再來個練習好了。
我們練習是著寫出一個方法來判斷是不是一個正確的統編
統編的規則: https://www.fia.gov.tw/singlehtml/3?cntId=c4d9cff38c8642ef8872774ee9987283

// 題目:根據台灣財政部所提供的公司統編驗證規則,計算統一編號是否正確
function isValidVatNumber(vat) {
  //1.規定8碼數字才可進入判斷
  //2.聲明一個陣列紀錄每個數字的權重, 並將每個數字加權後的十位數與個位數加到sum變數
  //3.如果被5整除, 或是第7位數為7且sum+1可以被5整除, return true, 否則return false
  if (vat.length == 8) {
    const ratio = [1, 2, 1, 2, 1, 2, 4, 1];
    let sum = vat.split("").reduce((sum, num, i) => {
      return (
        sum +
        ((Number(num) * ratio[i]) % 10) + //個位數
        Math.trunc((Number(num) * ratio[i]) / 10) //十位數
      );
    }, 0);

    return sum % 5 == 0 || (vat[6] == 7 && (sum + 1) % 5 == 0);
  }
}

console.log(isValidVatNumber("10458575")); // true
console.log(isValidVatNumber("88117125")); // true
console.log(isValidVatNumber("53212539")); // true
console.log(isValidVatNumber("88117126")); // false
  1. 第一個if 用來判斷條件,必須長度要為8碼才可以進去判斷
  2. 依照統編每個位數佔的全重建立一個陣列
  3. 將要判斷的統一編號每個位數跟權重相乘後,使用reduce的方式把個位數跟十位數加到總和sum裡面
  4. 最後判斷這個總和是不是可以被5整除,或是在倒數第二位數字是7的情況下+1後可以被5整除

上一篇
[Day 7] 陣列 part2
下一篇
[Day 9] Event Loop
系列文
30天從零到有,帶你進入程式的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言